package projeto;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class LeArmazenaDadosArquivo {
	public static List<String> estabelecimentos = new ArrayList<String>(); // estabelecimentos que estao no arquivo
	public static List<String> opinioes = new ArrayList<String>(); // opinioes que estao no arquivo
	public static List<String> notas = new ArrayList<String>(); // nome e notas do usuario
	public static List<String> notasUsuarioEstabelecimento = new ArrayList<String>(); // Lista para armazenar o estabelecimento e as notas de cada usuario para o msm
	public static List<String> estabelecimentosPopularidade = new ArrayList<String>(); //Lista para armazenar os estabelecimentos e sua respectiva popularidade
	public static List<Integer> popularidade = new ArrayList<Integer>(); // popularidade
	public static List<Integer> popularidade2 = new ArrayList<Integer>(); // popularidade ordenada
	
	public static Usuario usuario;
	public static Usuarios usuarios = new Usuarios();
	
	public static void main(String[] args) {
		LeArmazenaDadosArquivos("estabelecimentos.txt", "opinioes.txt");
		//System.out.println(caso1());
		//System.out.println(caso2());
		
		for (int i = 0; i < notas.size(); i += 40) {
			usuario = new Usuario(notas.get(i)); // notas.get(i) - nome do usuario
			for (int j = 0; j < notas.subList(i+1, i+40).size(); j++) {
				usuario.adicionaNotas(notas.subList(i+1, i+40).get(j)); // adicionando as notas de notas.get(i)
			}
			usuarios.adicionaUsuario(usuario); // adicionando o usuario a lista de usuarios do sistema
		}
		
		System.out.println(usuarios.getUsuarioNome("Nazareno").getNome());
		System.out.println(usuarios.getUsuarioNome("Nazareno").imprimeNotas());
	}
	
	private static void LeArmazenaDadosArquivos(String nomeArquivo1, String nomeArquivo2) {
		try {
			BufferedReader in = new BufferedReader(new FileReader(nomeArquivo1));//"estabelecimentos.txt"));
            	String str;
            	while (in.ready()) {
            		str = in.readLine();
            		estabelecimentos.add(str); // lista dos estabelecimentos, endereco e tipo de servico
            	}
            	in.close();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
    
		try {
			BufferedReader in = new BufferedReader(new FileReader(nomeArquivo2));//"opinioes.txt"));
            	String str;
            	while (in.ready()) {
            		str = in.readLine();
            		opinioes.add(str); // lista das opinioes
            	}
            	in.close();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		
		estabelecimentos.remove(0);
	    opinioes.remove(0);
	    
	    int num = 1; // numero de anonimos
	    for (int i = 0; i < opinioes.size(); i++) { // adicionado nome e notas na lista de notas e substituiindo "" por Anonimo
	    	for (int n = 1; n < 41; n ++) {
	    		if (opinioes.get(i).replace(" ", "").split(";")[n].split(":")[0].equals("")) {
	    			notas.add("Anonimo " + num);
	    			num += 1;
	    		}else {
	    			notas.add(opinioes.get(i).replace(" ", "").split(";")[n].split(":")[0]);
	    		}
	    	}	    	    	
	    }
	    
	}
	
	private static List<String> caso1(){
	// CASO 1
		for (int i = 0; i < estabelecimentos.size(); i++) {	    	 
    		notasUsuarioEstabelecimento.add(estabelecimentos.get(i).split(";")[0]);
    		for (int j = 0; j < notas.size(); j += 40) {
    			notasUsuarioEstabelecimento.add(notas.get(j) + " - " + notas.subList(j+1, j+40).get(i));
    		}
    	}
		return notasUsuarioEstabelecimento;
	}
	
	private static List<String> caso2(){
	// CASO 2
		int y = 0; // soma das notas
	    for (int i = 0; i < estabelecimentos.size(); i++) {
	    	for (int j = 0; j < notas.size(); j += 40) {
	    		y += Integer.parseInt(notas.subList(j+1, j+40).get(i));
	    	}
	    	popularidade.add(y);
	    	y = 0;
	    }
	    
	    popularidade2.addAll(popularidade);
	    Collections.sort(popularidade2);
	    Collections.reverse(popularidade2);
		
		
		int a = 0; // popularidade repetida
	    for (int i = 0; i < popularidade2.size(); i++) {
	    	if (a != popularidade2.get(i)) {
	    		estabelecimentosPopularidade.add(estabelecimentos.get(popularidade.indexOf(popularidade2.get(i))).split(";")[0] + " - " + popularidade2.get(i));
	    		a = popularidade2.get(i);
	    	}else {
	    		estabelecimentosPopularidade.add(estabelecimentos.get(popularidade.subList(popularidade.indexOf(popularidade2.get(i))+1, popularidade.size()-1).indexOf(popularidade2.get(i))+popularidade.indexOf(popularidade2.get(i))+1).split(";")[0] + " - " + popularidade2.get(i));
	    	}
	    }	    
	    return estabelecimentosPopularidade; 
	    
	}

}
